package model;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import factory.HibernateUtil;


public class ProdutoDao {
	public static List<Produto> buscarTodos() {
        List<Produto> produtos = new ArrayList<Produto>();
        Transaction trns = null;
        Session session = HibernateUtil.getSession();
        try {
            trns = session.beginTransaction();
            produtos = session.createQuery("from Produto").list();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return produtos;
    }
	
	public static List<Produto> buscarTodosDisponiveis() {
        List<Produto> produtos = new ArrayList<Produto>();
        Transaction trns = null;
        Session session = HibernateUtil.getSession();
        try {
            trns = session.beginTransaction();
            produtos = session.createQuery("from Produto where statusEdital = false").list();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return produtos;
    }
 
	public static void salvar(Produto p){
		Transaction trns = null;
		Session session = HibernateUtil.getSession();
		try {
			trns = session.beginTransaction();
			session.save(p);
			session.getTransaction().commit();
		} catch (RuntimeException e) {
			if (trns != null) {
				trns.rollback();
			}
			e.printStackTrace();
		} finally {
			session.flush();
			session.close();
		}
	}
 
	public static Produto buscarPorId(String id) {
		Produto produto = new Produto();
		Transaction trns = null;
		Session session = HibernateUtil.getSession();
		Query query = session.createQuery("from Produto where idProduto = "+ id);
		try {
			trns = session.beginTransaction();
			produto = (Produto) query.uniqueResult();
		} catch (RuntimeException e) {
			e.printStackTrace();
		} finally {
			session.flush();
			session.close();
		}
		return produto;
	}
 
	public static void alterarProduto(Produto produto) {
		Transaction trns = null;
		Session session = HibernateUtil.getSession();
		try {
			trns = session.beginTransaction();
			session.update(produto);
			session.getTransaction().commit();
		} catch (RuntimeException e) {
			if (trns != null) {
				trns.rollback();
			}
			e.printStackTrace();
		} finally {
			session.flush();
			session.close();
		}
	}
 
	public static void excluirProduto(Produto produto) {
		Transaction trns = null;
		Session session = HibernateUtil.getSession();
		try {
			trns = session.beginTransaction();
			session.delete(produto);
			session.getTransaction().commit();
		} catch (RuntimeException e) {
			if (trns != null) {
				trns.rollback();
			}
			e.printStackTrace();
		} finally {
			session.flush();
			session.close();
		}
	}
}
